package tech.aistar.day12.homework;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 本类用来演示:
 *
 * @author: success
 * @date: 2022/8/4 8:43 上午
 */
public class BaseDaoImpl<T> implements IBaseDao<T>{
    public static final String PATH = "src/tech/aistar/day12/homework/data/purcase.txt";

    @Override
    public void save(T t) {
        //序列化和反序列化 - 规则 - 支持一次性写,一次性读.    不支持追加分批次写-读.

        //写之前,需要考虑文件中是否有合法的purcase序列化的数据.
        List<T> oldList = getAll();

        //准备一个集合 - 用来写出去的.
        List<T> dataList = new ArrayList<>();

        //dataList是有可能为null
        if(null!=oldList && oldList.size()>0){
           //将原来的oldList中的数据全部放入到写出去的集合dataList中
            dataList.addAll(oldList);
        }

        //即将要添加的对象
        dataList.add(t);

        //写出去
        try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(PATH))){
            out.writeObject(dataList);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public List<T> getAll() {
        List<T> list = null;
        try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(PATH))){
            //读取...
            //要求:写到文件中,也应该是一个集合
            list = (List<T>) in.readObject();
        } catch (FileNotFoundException e) { //PATH是不存在的
            //e.printStackTrace();//异常的简单的处理 - 日志的记录
            list = null;
        } catch (IOException e) {
            //java.io.EOFException - 文件已经到达末尾,没有可以读的字节流的时候 - 文件存在的,但是文件中没有任何内容
            //java.io.StreamCorruptedException - 文件中存在一些非法的字符
            //e.printStackTrace();
            list = null;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return list;
    }
}
